原因
使用python-docx中的.text
提取文本时总是少几个字,如图。
转XML查看缺少部分的文字均为Smarttag标签。
太长不看
1 | <w:p w14:paraId="5AF027F4" w14:textId="77777777" w:rsidR="00B8309C" w:rsidRPr="00393121" w:rsidRDefault="00B8309C" w:rsidP="00B8309C"><w:pPr><w:spacing w:line="240" w:lineRule="atLeast"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:b/><w:bCs/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr></w:pPr><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>N2-15</w:t></w:r><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>,十车,</w:t></w:r><w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="chmetcnv"><w:smartTagPr><w:attr w:name="TCSC" w:val="0"/><w:attr w:name="NumberType" w:val="1"/><w:attr w:name="Negative" w:val="False"/><w:attr w:name="HasSpace" w:val="False"/><w:attr w:name="SourceValue" w:val="143"/><w:attr w:name="UnitName" w:val="米"/></w:smartTagPr><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:b/><w:bCs/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>143</w:t></w:r><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>米</w:t></w:r></w:smartTag><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>,五车,</w:t></w:r><w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="chmetcnv"><w:smartTagPr><w:attr w:name="TCSC" w:val="0"/><w:attr w:name="NumberType" w:val="1"/><w:attr w:name="Negative" w:val="False"/><w:attr w:name="HasSpace" w:val="False"/><w:attr w:name="SourceValue" w:val="83"/><w:attr w:name="UnitName" w:val="米"/></w:smartTagPr><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:b/><w:bCs/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>83</w:t></w:r><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>米</w:t></w:r></w:smartTag><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>、三车,</w:t></w:r><w:smartTag w:uri="urn:schemas-microsoft-com:office:smarttags" w:element="chmetcnv"><w:smartTagPr><w:attr w:name="TCSC" w:val="0"/><w:attr w:name="NumberType" w:val="1"/><w:attr w:name="Negative" w:val="False"/><w:attr w:name="HasSpace" w:val="False"/><w:attr w:name="SourceValue" w:val="44"/><w:attr w:name="UnitName" w:val="米"/></w:smartTagPr><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:b/><w:bCs/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>44</w:t></w:r><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>米</w:t></w:r></w:smartTag><w:r w:rsidRPr="00393121"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:b/><w:bCs/><w:sz w:val="21"/><w:szCs w:val="21"/></w:rPr><w:t>。</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1999" w:type="dxa"/> |
解决
1 | def para2text(p): |
使用了段落对象的_element
属性的xpath()
方法来提取段落中的所有文本元素,然后将它们连接成一个字符串。
EP:
原方法:
1 | tbs.cell(i, 2).text |
新方法:
1 | para2text(tbs.cell(i, 2)) |